Variables:

Risk Age Sex Country

library(data.table)
library(tidyr)
library(maps)
library(haven)
library(ggplot2)
library(dplyr)

#read the data (Wave 5)

# Data of Wave 5


WV5_data <- readRDS("/Users/cristinacandido/Documents/Github/risk_wvs/data/WVS/F00007944-WV5_Data_R_v20180912.rds")


# Convert WV5_data-object in data.frame 
WV5_data_df <- as.data.frame(WV5_data)

# show first five columns
head(WV5_data_df[, 1:5])

clean the data set

library(dplyr)

#rename the variables
WV5_data <- WV5_data_df %>%
  rename(gender = V235, age = V237, country_code = V2, wave = V1, risktaking = V86)
WV5_data


#select only the variables of interest
WV5_data <- WV5_data %>%
  select(gender, age, country_code, wave, risktaking)
WV5_data
#decode the country names 
countrynames = read.csv("/Users/cristinacandido/Documents/Github/risk_wvs/data/WVS/countrynames.txt", header=FALSE,as.is=TRUE)
colnames(countrynames) = c("code", "name")
WV5_data$country = countrynames$name [match(WV5_data$country_code, countrynames$code)]
table(WV5_data$country)

            Andorra           Argentina           Australia              Brazil            Bulgaria        Burkina Faso              Canada 
               1003                1002                1421                1500                1001                1534                2164 
              Chile               China            Colombia          Cyprus (G)               Egypt            Ethiopia             Finland 
               1000                1991                3025                1050                3051                1500                1014 
             France             Georgia             Germany               Ghana       Great Britain           Guatemala           Hong Kong 
               1001                1500                2064                1534                1041                1000                1252 
            Hungary               India           Indonesia                Iran                Iraq               Italy               Japan 
               1007                2001                2015                2667                2701                1012                1096 
             Jordan            Malaysia                Mali              Mexico             Moldova             Morocco         Netherlands 
               1200                1201                1534                1560                1046                1200                1050 
        New Zealand              Norway                Peru              Poland             Romania              Russia              Rwanda 
                954                1025                1500                1000                1776                2033                1507 
           Slovenia        South Africa         South Korea               Spain              Sweden         Switzerland              Taiwan 
               1037                2988                1200                1200                1003                1241                1227 
           Thailand Trinidad and Tobago              Turkey             Ukraine       United States             Uruguay            Viet Nam 
               1534                1002                1346                1000                1249                1000                1495 
             Zambia 
               1500 
WV5_data
NA
NA

#Read Dataset (Wave 6)

WV6_data <- load("/Users/cristinacandido/Documents/Github/risk_wvs/data/WVS/WV6_Data_R_v20201117.rdata") 
WV6_data <- WV6_Data_R_v20201117 
print(WV6_data)

#rename variables

WV6_data <- WV6_data %>%
  rename(wave = V1, gender = V240, age = V242,country_code = V2, risktaking = V76)


#select only the variables of interest
WV6_data <- WV6_data %>%
  select(wave, gender, age, country_code,risktaking)
WV6_data
NA

#decode daraset (Wave 6)

countrynames = read.csv("/Users/cristinacandido/Documents/Github/risk_wvs/data/WVS/countrynames.txt", header=FALSE,as.is=TRUE)
colnames(countrynames) = c("code", "name")
WV6_data$country = countrynames$name [match(WV6_data$country_code, countrynames$code)]
table(WV6_data$country)

            Algeria           Argentina             Armenia           Australia          Azerbaijan             Belarus              Brazil 
               1200                1030                1100                1477                1002                1535                1486 
              Chile               China            Colombia          Cyprus (G)             Ecuador               Egypt             Estonia 
               1000                2300                1512                1000                1202                1523                1533 
            Georgia             Germany               Ghana               Haiti           Hong Kong               India                Iraq 
               1202                2046                1552                1996                1000                4078                1200 
              Japan              Jordan          Kazakhstan              Kuwait          Kyrgyzstan             Lebanon               Libya 
               2443                1200                1500                1303                1500                1200                2131 
           Malaysia              Mexico             Morocco         Netherlands         New Zealand             Nigeria            Pakistan 
               1300                2000                1200                1902                 841                1759                1200 
          Palestine                Peru         Philippines              Poland               Qatar             Romania              Russia 
               1000                1210                1200                 966                1060                1503                2500 
             Rwanda           Singapore            Slovenia        South Africa         South Korea               Spain              Sweden 
               1527                1972                1069                3531                1200                1189                1206 
             Taiwan            Thailand Trinidad and Tobago             Tunisia              Turkey             Ukraine       United States 
               1238                1200                 999                1205                1605                1500                2232 
            Uruguay          Uzbekistan               Yemen            Zimbabwe 
               1000                1500                1000                1500 
WV6_data

#combine the 2 dataset (Wave 6 + Wave 5)

WV5_data
WV6_data
WVS_data = rbind(WV5_data, WV6_data)
WVS_data
NA
NA

#exclusion of participants and omission of missing data (na)

WVS_data = subset(WVS_data, risktaking > 0 & gender > 0 & age >0 )
data_Wave5 = subset(WV5_data, risktaking > 0 & gender > 0 & age >0 )
data_Wave6 = subset(WV6_data, risktaking > 0 & gender > 0 & age >0)
WVS_data <- na.omit(WVS_data)
data_Wave5 <- na.omit(data_Wave5)
data_Wave6 <- na.omit(data_Wave6)
# Transfrom risk item such that high values represent more risk taking
WVS_data$risktaking = 6 - WVS_data$risktaking + 1

  
# Transform risk variable into T-score (mean = 50, sd = 10)
WVS_data$T_score_risktaking = 10*scale(WVS_data$risktaking, center=TRUE,scale=TRUE)+50

WVS_data

#Transform risk variable into Z score 

# Assuming T-scores have a mean of 50 and a standard deviation of 10
WVS_data$Z_score_risktaking = (WVS_data$T_score_risktaking - 50) / 10

# Print the resulting data frame
print(WVS_data)
NA

#World map

world_map <- map_data("world")
recorded_countries <- unique(WVS_data$country)
world_map$recorded <- ifelse(world_map$region %in% recorded_countries, "Recorded", "Not Recorded")

ggplot(world_map, aes(x = long, y = lat, group = group, fill = recorded)) + 
  geom_polygon(color = "white") +
  scale_fill_manual(values = c("Recorded" = "red", "Not Recorded" = "lightgrey"), guide = "none") +
  theme_void() +
  labs(title = "WVS", fill = "Status") +
  theme(legend.position = "none", plot.title = element_text(hjust = 0.5))

# Load the dplyr package
library(dplyr)

# Assuming the data frame is called 'data' and the column containing the country information is called 'country'
country_counts <- WVS_data %>%
  count(country)

# Print the result
print(country_counts)
NA
# read in file that contains hardship indicators manually collected from CIA factbook, WHO, and World Bank 
# (see Supplemental Materials for URL sources)
countryfacts = read.csv("/Users/cristinacandido/Documents/Github/risk_wvs/data/WVS/countryfacts_selection.csv", as.is = TRUE, header = TRUE) 

# Create a vector of labels with the same length as the number of columns in 'countryfacts'
labels <- c("code","country","codeWVS","Homicide","GDP","InfMort","LifeExp","GINI","GenderPEdu","code2")




# Print the result
print(countryfacts)
# Load the dplyr package if not already loaded
if (!require(dplyr)) {
  install.packages("dplyr")
  library(dplyr)
}

# Create the 'hardship' column in the 'countryfacts' data frame
countryfacts <- countryfacts %>%
  mutate(hardship = (homiciderate + gdp + infantmortality + lifeexpectancy + gini + femalemale_primedu) / 6)
countryfacts



# View the distribution of the 'hardship_index' column for each country
hardship_index_distribution <- countryfacts %>%
  group_by(label) %>%
  summarize(
    mean = mean(hardship, na.rm = TRUE),
    median = median(hardship, na.rm = TRUE),
    sd = sd(hardship, na.rm = TRUE),
    min = min(hardship, na.rm = TRUE),
    max = max(hardship, na.rm = TRUE),
    n = sum(!is.na(hardship))
  )
Warning: There were 24 warnings in `summarize()`.
The first warning was:
ℹ In argument: `min = min(hardship, na.rm = TRUE)`.
ℹ In group 2: `label = "Andorra"`.
Caused by warning in `min()`:
! no non-missing arguments to min; returning Inf
ℹ Run ]8;;ide:run:dplyr::last_dplyr_warnings()dplyr::last_dplyr_warnings()]8;; to see the 23 remaining warnings.
# Print the result
print(hardship_index_distribution)

#table with female percentage, mean age, mean risk taking per countries (summary of the countries)

library(dplyr)

table_data_WVS <- WVS_data %>%
  group_by(country) %>%
  summarise(
    n = n(),
    female_percentage = mean(gender == 1) * 100,
    mean_age = mean(age, na.rm = TRUE),
    age_range = paste(min(age, na.rm = TRUE), "-", max(age, na.rm = TRUE)),
    mean_risktaking = mean(Z_score_risktaking, na.rm = TRUE)
  )

table_data_WVS
#graph across countries: risk taking vs age vs gender (Z-score for age and risk taking)   

ggplot(WVS_data, aes(scale(age), Z_score_risktaking, color = factor(gender))) +
  geom_point(size = 0.1) +  
  geom_smooth(method = "lm") +
  scale_color_manual(values = c("blue", "red"), labels = c("Male", "Female")) +
  labs(color = "Gender")



WVS_data
NA
#regression table (risk taking and age -> Z-score)

regression_results_WVS <- WVS_data %>%
  group_by(country) %>%
  do(model = lm(Z_score_risktaking ~ scale(age) + gender, data = .)) %>%
  summarize(
    country = first(country),
    intercept = coef(summary(model))[1, 1],
    slope_age = coef(summary(model))[2, 1],
    slope_gender = coef(summary(model))[3, 1]
  )

regression_results_WVS
NA
NA
gps_data <- haven::read_dta("/Users/cristinacandido/Documents/Github/risk_wvs/data/individual_new.dta")

gps_data
# Clean the data by removing records with missing values
gps_data <- gps_data %>%
  drop_na(country, isocode, risktaking, gender, age)



# Display the cleaned data
gps_data
#select only the variables of interest
gps_data <- gps_data %>%
  select(country, isocode, ison, risktaking, gender, age)
gps_data
#Z-score for age 
gps_data <- gps_data %>%
  group_by(country) %>%
  mutate(z_score_age = scale(age))

# Display the new column with Z-Scores per Country
gps_data

#table intercept and slope

regression_results_gps <- gps_data %>%
  group_by(country) %>%
  do(model = lm(risktaking ~ z_score_age + gender, data = .)) %>%
  summarize(
    country = first(country),
    intercept = coef(summary(model))[1, 1],
    slope_age = coef(summary(model))[2, 1],
    slope_gender = coef(summary(model))[3, 1]
  )

regression_results_gps
common_countries <- intersect(WVS_data$country, gps_data$country)
selected_countries <- c("Argentina", "Australia", "Brazil", "Canada", "Chile", "China", "Egypt", "Finland", "France", "Georgia",
                         "Germany", "Ghana", "Hungary", "India", "Indonesia", "Iran", "Japan", "Jordan", "Mexico", "Moldova",
                         "Morocco", "Netherlands", "Peru", "Poland", "Romania", "Russia", "Rwanda", "South Africa", "South Korea",
                         "Spain", "Sweden", "Switzerland", "Thailand", "Turkey", "Ukraine", "United States", "Algeria", "Colombia",
                         "Estonia", "Haiti", "Iraq", "Kazakhstan", "Nigeria", "Pakistan", "Philippines", "Zimbabwe")

# Filter the original dataset
new_WVS <- WVS_data[WVS_data$country %in% selected_countries, ]

# View the new dataset
new_WVS
NA
NA

selected_countries <- c("Argentina", "Australia", "Brazil", "Canada", "Chile", "China", "Egypt", "Finland", "France", "Georgia",
                         "Germany", "Ghana", "Hungary", "India", "Indonesia", "Iran", "Japan", "Jordan", "Mexico", "Moldova",
                         "Morocco", "Netherlands", "Peru", "Poland", "Romania", "Russia", "Rwanda", "South Africa", "South Korea",
                         "Spain", "Sweden", "Switzerland", "Thailand", "Turkey", "Ukraine", "United States", "Algeria", "Colombia",
                         "Estonia", "Haiti", "Iraq", "Kazakhstan", "Nigeria", "Pakistan", "Philippines", "Zimbabwe")

# Filter the original dataset
new_gps <- gps_data[gps_data$country %in% selected_countries, ]

# View the new dataset
new_gps
NA
regression_results_WVS_new <- new_WVS %>%
  group_by(country) %>%
  do(model = lm(Z_score_risktaking ~ scale(age) + gender, data = .)) %>%
  summarize(
    country = first(country),
    intercept_WVS = coef(summary(model))[1, 1],
    slope_age_WVS = coef(summary(model))[2, 1],
    slope_gender_WVS = coef(summary(model))[3, 1]
  )

regression_results_WVS_new
NA
regression_results_gps_new <- new_gps %>%
  group_by(country) %>%
  do(model = lm(risktaking ~ scale(age) + gender, data = .)) %>%
  summarize(
    country = first(country),
    intercept_gps = coef(summary(model))[1, 1],
    slope_age_gps = coef(summary(model))[2, 1],
    slope_gender_gps = coef(summary(model))[3, 1]
  )

regression_results_gps_new
NA
regression_results_gps_new
regression_results_WVS_new
# Assuming "country" is the common column
merged_results <- merge(regression_results_gps_new, regression_results_WVS_new, by = "country", all = TRUE)

merged_results
NA
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpWYXJpYWJsZXM6IAoKUmlzawpBZ2UgClNleApDb3VudHJ5CgoKYGBge3J9CmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeSh0aWR5cikKbGlicmFyeShtYXBzKQpsaWJyYXJ5KGhhdmVuKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHBseXIpCgpgYGAKCiNyZWFkIHRoZSBkYXRhIChXYXZlIDUpCmBgYHtyfQojIERhdGEgb2YgV2F2ZSA1CgoKV1Y1X2RhdGEgPC0gcmVhZFJEUygiL1VzZXJzL2NyaXN0aW5hY2FuZGlkby9Eb2N1bWVudHMvR2l0aHViL3Jpc2tfd3ZzL2RhdGEvV1ZTL0YwMDAwNzk0NC1XVjVfRGF0YV9SX3YyMDE4MDkxMi5yZHMiKQoKCiMgQ29udmVydCBXVjVfZGF0YS1vYmplY3QgaW4gZGF0YS5mcmFtZSAKV1Y1X2RhdGFfZGYgPC0gYXMuZGF0YS5mcmFtZShXVjVfZGF0YSkKCiMgc2hvdyBmaXJzdCBmaXZlIGNvbHVtbnMKaGVhZChXVjVfZGF0YV9kZlssIDE6NV0pCmBgYAoKIyBjbGVhbiB0aGUgZGF0YSBzZXQKYGBge3J9CmxpYnJhcnkoZHBseXIpCgojcmVuYW1lIHRoZSB2YXJpYWJsZXMKV1Y1X2RhdGEgPC0gV1Y1X2RhdGFfZGYgJT4lCiAgcmVuYW1lKGdlbmRlciA9IFYyMzUsIGFnZSA9IFYyMzcsIGNvdW50cnlfY29kZSA9IFYyLCB3YXZlID0gVjEsIHJpc2t0YWtpbmcgPSBWODYpCldWNV9kYXRhCgoKI3NlbGVjdCBvbmx5IHRoZSB2YXJpYWJsZXMgb2YgaW50ZXJlc3QKV1Y1X2RhdGEgPC0gV1Y1X2RhdGEgJT4lCiAgc2VsZWN0KGdlbmRlciwgYWdlLCBjb3VudHJ5X2NvZGUsIHdhdmUsIHJpc2t0YWtpbmcpCldWNV9kYXRhCmBgYAoKYGBge3J9CiNkZWNvZGUgdGhlIGNvdW50cnkgbmFtZXMgCmNvdW50cnluYW1lcyA9IHJlYWQuY3N2KCIvVXNlcnMvY3Jpc3RpbmFjYW5kaWRvL0RvY3VtZW50cy9HaXRodWIvcmlza193dnMvZGF0YS9XVlMvY291bnRyeW5hbWVzLnR4dCIsIGhlYWRlcj1GQUxTRSxhcy5pcz1UUlVFKQpjb2xuYW1lcyhjb3VudHJ5bmFtZXMpID0gYygiY29kZSIsICJuYW1lIikKV1Y1X2RhdGEkY291bnRyeSA9IGNvdW50cnluYW1lcyRuYW1lIFttYXRjaChXVjVfZGF0YSRjb3VudHJ5X2NvZGUsIGNvdW50cnluYW1lcyRjb2RlKV0KdGFibGUoV1Y1X2RhdGEkY291bnRyeSkKV1Y1X2RhdGEKCgpgYGAKCiNSZWFkIERhdGFzZXQgKFdhdmUgNikKYGBge3J9CldWNl9kYXRhIDwtIGxvYWQoIi9Vc2Vycy9jcmlzdGluYWNhbmRpZG8vRG9jdW1lbnRzL0dpdGh1Yi9yaXNrX3d2cy9kYXRhL1dWUy9XVjZfRGF0YV9SX3YyMDIwMTExNy5yZGF0YSIpIApXVjZfZGF0YSA8LSBXVjZfRGF0YV9SX3YyMDIwMTExNyAKcHJpbnQoV1Y2X2RhdGEpCmBgYAoKI3JlbmFtZSB2YXJpYWJsZXMKYGBge3J9CldWNl9kYXRhIDwtIFdWNl9kYXRhICU+JQogIHJlbmFtZSh3YXZlID0gVjEsIGdlbmRlciA9IFYyNDAsIGFnZSA9IFYyNDIsY291bnRyeV9jb2RlID0gVjIsIHJpc2t0YWtpbmcgPSBWNzYpCgoKI3NlbGVjdCBvbmx5IHRoZSB2YXJpYWJsZXMgb2YgaW50ZXJlc3QKV1Y2X2RhdGEgPC0gV1Y2X2RhdGEgJT4lCiAgc2VsZWN0KHdhdmUsIGdlbmRlciwgYWdlLCBjb3VudHJ5X2NvZGUscmlza3Rha2luZykKV1Y2X2RhdGEKCmBgYAoKCiNkZWNvZGUgZGFyYXNldCAoV2F2ZSA2KQpgYGB7cn0KY291bnRyeW5hbWVzID0gcmVhZC5jc3YoIi9Vc2Vycy9jcmlzdGluYWNhbmRpZG8vRG9jdW1lbnRzL0dpdGh1Yi9yaXNrX3d2cy9kYXRhL1dWUy9jb3VudHJ5bmFtZXMudHh0IiwgaGVhZGVyPUZBTFNFLGFzLmlzPVRSVUUpCmNvbG5hbWVzKGNvdW50cnluYW1lcykgPSBjKCJjb2RlIiwgIm5hbWUiKQpXVjZfZGF0YSRjb3VudHJ5ID0gY291bnRyeW5hbWVzJG5hbWUgW21hdGNoKFdWNl9kYXRhJGNvdW50cnlfY29kZSwgY291bnRyeW5hbWVzJGNvZGUpXQp0YWJsZShXVjZfZGF0YSRjb3VudHJ5KQpXVjZfZGF0YQpgYGAKCiNjb21iaW5lIHRoZSAyIGRhdGFzZXQgKFdhdmUgNiArIFdhdmUgNSkKYGBge3J9CldWNV9kYXRhCldWNl9kYXRhCldWU19kYXRhID0gcmJpbmQoV1Y1X2RhdGEsIFdWNl9kYXRhKQpXVlNfZGF0YQoKCmBgYAojZXhjbHVzaW9uIG9mIHBhcnRpY2lwYW50cyBhbmQgb21pc3Npb24gb2YgbWlzc2luZyBkYXRhIChuYSkKYGBge3J9CldWU19kYXRhID0gc3Vic2V0KFdWU19kYXRhLCByaXNrdGFraW5nID4gMCAmIGdlbmRlciA+IDAgJiBhZ2UgPjAgKQpkYXRhX1dhdmU1ID0gc3Vic2V0KFdWNV9kYXRhLCByaXNrdGFraW5nID4gMCAmIGdlbmRlciA+IDAgJiBhZ2UgPjAgKQpkYXRhX1dhdmU2ID0gc3Vic2V0KFdWNl9kYXRhLCByaXNrdGFraW5nID4gMCAmIGdlbmRlciA+IDAgJiBhZ2UgPjApCldWU19kYXRhIDwtIG5hLm9taXQoV1ZTX2RhdGEpCmRhdGFfV2F2ZTUgPC0gbmEub21pdChkYXRhX1dhdmU1KQpkYXRhX1dhdmU2IDwtIG5hLm9taXQoZGF0YV9XYXZlNikKYGBgCmBgYHtyfQojIFRyYW5zZnJvbSByaXNrIGl0ZW0gc3VjaCB0aGF0IGhpZ2ggdmFsdWVzIHJlcHJlc2VudCBtb3JlIHJpc2sgdGFraW5nCldWU19kYXRhJHJpc2t0YWtpbmcgPSA2IC0gV1ZTX2RhdGEkcmlza3Rha2luZyArIDEKCiAgCiMgVHJhbnNmb3JtIHJpc2sgdmFyaWFibGUgaW50byBULXNjb3JlIChtZWFuID0gNTAsIHNkID0gMTApCldWU19kYXRhJFRfc2NvcmVfcmlza3Rha2luZyA9IDEwKnNjYWxlKFdWU19kYXRhJHJpc2t0YWtpbmcsIGNlbnRlcj1UUlVFLHNjYWxlPVRSVUUpKzUwCgpXVlNfZGF0YQoKI1RyYW5zZm9ybSByaXNrIHZhcmlhYmxlIGludG8gWiBzY29yZSAKCiMgQXNzdW1pbmcgVC1zY29yZXMgaGF2ZSBhIG1lYW4gb2YgNTAgYW5kIGEgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIDEwCldWU19kYXRhJFpfc2NvcmVfcmlza3Rha2luZyA9IChXVlNfZGF0YSRUX3Njb3JlX3Jpc2t0YWtpbmcgLSA1MCkgLyAxMAoKIyBQcmludCB0aGUgcmVzdWx0aW5nIGRhdGEgZnJhbWUKcHJpbnQoV1ZTX2RhdGEpCgpgYGAKI1dvcmxkIG1hcCAKYGBge3J9CndvcmxkX21hcCA8LSBtYXBfZGF0YSgid29ybGQiKQpyZWNvcmRlZF9jb3VudHJpZXMgPC0gdW5pcXVlKFdWU19kYXRhJGNvdW50cnkpCndvcmxkX21hcCRyZWNvcmRlZCA8LSBpZmVsc2Uod29ybGRfbWFwJHJlZ2lvbiAlaW4lIHJlY29yZGVkX2NvdW50cmllcywgIlJlY29yZGVkIiwgIk5vdCBSZWNvcmRlZCIpCgpnZ3Bsb3Qod29ybGRfbWFwLCBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXAsIGZpbGwgPSByZWNvcmRlZCkpICsgCiAgZ2VvbV9wb2x5Z29uKGNvbG9yID0gIndoaXRlIikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIlJlY29yZGVkIiA9ICJyZWQiLCAiTm90IFJlY29yZGVkIiA9ICJsaWdodGdyZXkiKSwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZV92b2lkKCkgKwogIGxhYnModGl0bGUgPSAiV1ZTIiwgZmlsbCA9ICJTdGF0dXMiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKCmBgYAoKYGBge3J9CiMgTG9hZCB0aGUgZHBseXIgcGFja2FnZQpsaWJyYXJ5KGRwbHlyKQoKIyBBc3N1bWluZyB0aGUgZGF0YSBmcmFtZSBpcyBjYWxsZWQgJ2RhdGEnIGFuZCB0aGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIGNvdW50cnkgaW5mb3JtYXRpb24gaXMgY2FsbGVkICdjb3VudHJ5Jwpjb3VudHJ5X2NvdW50cyA8LSBXVlNfZGF0YSAlPiUKICBjb3VudChjb3VudHJ5KQoKIyBQcmludCB0aGUgcmVzdWx0CnByaW50KGNvdW50cnlfY291bnRzKQoKYGBgCgpgYGB7cn0KIyByZWFkIGluIGZpbGUgdGhhdCBjb250YWlucyBoYXJkc2hpcCBpbmRpY2F0b3JzIG1hbnVhbGx5IGNvbGxlY3RlZCBmcm9tIENJQSBmYWN0Ym9vaywgV0hPLCBhbmQgV29ybGQgQmFuayAKIyAoc2VlIFN1cHBsZW1lbnRhbCBNYXRlcmlhbHMgZm9yIFVSTCBzb3VyY2VzKQpjb3VudHJ5ZmFjdHMgPSByZWFkLmNzdigiL1VzZXJzL2NyaXN0aW5hY2FuZGlkby9Eb2N1bWVudHMvR2l0aHViL3Jpc2tfd3ZzL2RhdGEvV1ZTL2NvdW50cnlmYWN0c19zZWxlY3Rpb24uY3N2IiwgYXMuaXMgPSBUUlVFLCBoZWFkZXIgPSBUUlVFKSAKCiMgQ3JlYXRlIGEgdmVjdG9yIG9mIGxhYmVscyB3aXRoIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gJ2NvdW50cnlmYWN0cycKbGFiZWxzIDwtIGMoImNvZGUiLCJjb3VudHJ5IiwiY29kZVdWUyIsIkhvbWljaWRlIiwiR0RQIiwiSW5mTW9ydCIsIkxpZmVFeHAiLCJHSU5JIiwiR2VuZGVyUEVkdSIsImNvZGUyIikKCgoKCiMgUHJpbnQgdGhlIHJlc3VsdApwcmludChjb3VudHJ5ZmFjdHMpCmBgYApgYGB7cn0KIyBMb2FkIHRoZSBkcGx5ciBwYWNrYWdlIGlmIG5vdCBhbHJlYWR5IGxvYWRlZAppZiAoIXJlcXVpcmUoZHBseXIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZHBseXIiKQogIGxpYnJhcnkoZHBseXIpCn0KCiMgQ3JlYXRlIHRoZSAnaGFyZHNoaXAnIGNvbHVtbiBpbiB0aGUgJ2NvdW50cnlmYWN0cycgZGF0YSBmcmFtZQpjb3VudHJ5ZmFjdHMgPC0gY291bnRyeWZhY3RzICU+JQogIG11dGF0ZShoYXJkc2hpcCA9IChob21pY2lkZXJhdGUgKyBnZHAgKyBpbmZhbnRtb3J0YWxpdHkgKyBsaWZlZXhwZWN0YW5jeSArIGdpbmkgKyBmZW1hbGVtYWxlX3ByaW1lZHUpIC8gNikKY291bnRyeWZhY3RzCgoKCiMgVmlldyB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSAnaGFyZHNoaXBfaW5kZXgnIGNvbHVtbiBmb3IgZWFjaCBjb3VudHJ5CmhhcmRzaGlwX2luZGV4X2Rpc3RyaWJ1dGlvbiA8LSBjb3VudHJ5ZmFjdHMgJT4lCiAgZ3JvdXBfYnkobGFiZWwpICU+JQogIHN1bW1hcml6ZSgKICAgIG1lYW4gPSBtZWFuKGhhcmRzaGlwLCBuYS5ybSA9IFRSVUUpLAogICAgbWVkaWFuID0gbWVkaWFuKGhhcmRzaGlwLCBuYS5ybSA9IFRSVUUpLAogICAgc2QgPSBzZChoYXJkc2hpcCwgbmEucm0gPSBUUlVFKSwKICAgIG1pbiA9IG1pbihoYXJkc2hpcCwgbmEucm0gPSBUUlVFKSwKICAgIG1heCA9IG1heChoYXJkc2hpcCwgbmEucm0gPSBUUlVFKSwKICAgIG4gPSBzdW0oIWlzLm5hKGhhcmRzaGlwKSkKICApCgojIFByaW50IHRoZSByZXN1bHQKcHJpbnQoaGFyZHNoaXBfaW5kZXhfZGlzdHJpYnV0aW9uKQpgYGAKCiN0YWJsZSB3aXRoIGZlbWFsZSBwZXJjZW50YWdlLCBtZWFuIGFnZSwgbWVhbiByaXNrIHRha2luZyBwZXIgY291bnRyaWVzIChzdW1tYXJ5IG9mIHRoZSBjb3VudHJpZXMpCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQoKdGFibGVfZGF0YV9XVlMgPC0gV1ZTX2RhdGEgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgc3VtbWFyaXNlKAogICAgbiA9IG4oKSwKICAgIGZlbWFsZV9wZXJjZW50YWdlID0gbWVhbihnZW5kZXIgPT0gMSkgKiAxMDAsCiAgICBtZWFuX2FnZSA9IG1lYW4oYWdlLCBuYS5ybSA9IFRSVUUpLAogICAgYWdlX3JhbmdlID0gcGFzdGUobWluKGFnZSwgbmEucm0gPSBUUlVFKSwgIi0iLCBtYXgoYWdlLCBuYS5ybSA9IFRSVUUpKSwKICAgIG1lYW5fcmlza3Rha2luZyA9IG1lYW4oWl9zY29yZV9yaXNrdGFraW5nLCBuYS5ybSA9IFRSVUUpCiAgKQoKdGFibGVfZGF0YV9XVlMKYGBgCmBgYHtyfQojZ3JhcGggYWNyb3NzIGNvdW50cmllczogcmlzayB0YWtpbmcgdnMgYWdlIHZzIGdlbmRlciAoWi1zY29yZSBmb3IgYWdlIGFuZCByaXNrIHRha2luZykgICAKCmdncGxvdChXVlNfZGF0YSwgYWVzKHNjYWxlKGFnZSksIFpfc2NvcmVfcmlza3Rha2luZywgY29sb3IgPSBmYWN0b3IoZ2VuZGVyKSkpICsKICBnZW9tX3BvaW50KHNpemUgPSAwLjEpICsgIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiYmx1ZSIsICJyZWQiKSwgbGFiZWxzID0gYygiTWFsZSIsICJGZW1hbGUiKSkgKwogIGxhYnMoY29sb3IgPSAiR2VuZGVyIikKCgpXVlNfZGF0YQoKYGBgCgoKYGBge3J9CiNyZWdyZXNzaW9uIHRhYmxlIChyaXNrIHRha2luZyBhbmQgYWdlIC0+IFotc2NvcmUpCgpyZWdyZXNzaW9uX3Jlc3VsdHNfV1ZTIDwtIFdWU19kYXRhICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIGRvKG1vZGVsID0gbG0oWl9zY29yZV9yaXNrdGFraW5nIH4gc2NhbGUoYWdlKSArIGdlbmRlciwgZGF0YSA9IC4pKSAlPiUKICBzdW1tYXJpemUoCiAgICBjb3VudHJ5ID0gZmlyc3QoY291bnRyeSksCiAgICBpbnRlcmNlcHQgPSBjb2VmKHN1bW1hcnkobW9kZWwpKVsxLCAxXSwKICAgIHNsb3BlX2FnZSA9IGNvZWYoc3VtbWFyeShtb2RlbCkpWzIsIDFdLAogICAgc2xvcGVfZ2VuZGVyID0gY29lZihzdW1tYXJ5KG1vZGVsKSlbMywgMV0KICApCgpyZWdyZXNzaW9uX3Jlc3VsdHNfV1ZTCgoKYGBgCgoKYGBge3J9Cmdwc19kYXRhIDwtIGhhdmVuOjpyZWFkX2R0YSgiL1VzZXJzL2NyaXN0aW5hY2FuZGlkby9Eb2N1bWVudHMvR2l0aHViL3Jpc2tfd3ZzL2RhdGEvaW5kaXZpZHVhbF9uZXcuZHRhIikKCmdwc19kYXRhCmBgYApgYGB7cn0KIyBDbGVhbiB0aGUgZGF0YSBieSByZW1vdmluZyByZWNvcmRzIHdpdGggbWlzc2luZyB2YWx1ZXMKZ3BzX2RhdGEgPC0gZ3BzX2RhdGEgJT4lCiAgZHJvcF9uYShjb3VudHJ5LCBpc29jb2RlLCByaXNrdGFraW5nLCBnZW5kZXIsIGFnZSkKCgoKIyBEaXNwbGF5IHRoZSBjbGVhbmVkIGRhdGEKZ3BzX2RhdGEKYGBgCmBgYHtyfQojc2VsZWN0IG9ubHkgdGhlIHZhcmlhYmxlcyBvZiBpbnRlcmVzdApncHNfZGF0YSA8LSBncHNfZGF0YSAlPiUKICBzZWxlY3QoY291bnRyeSwgaXNvY29kZSwgaXNvbiwgcmlza3Rha2luZywgZ2VuZGVyLCBhZ2UpCmdwc19kYXRhCmBgYApgYGB7cn0KI1otc2NvcmUgZm9yIGFnZSAKZ3BzX2RhdGEgPC0gZ3BzX2RhdGEgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgbXV0YXRlKHpfc2NvcmVfYWdlID0gc2NhbGUoYWdlKSkKCiMgRGlzcGxheSB0aGUgbmV3IGNvbHVtbiB3aXRoIFotU2NvcmVzIHBlciBDb3VudHJ5Cmdwc19kYXRhCmBgYAojdGFibGUgaW50ZXJjZXB0IGFuZCBzbG9wZSAKYGBge3J9CnJlZ3Jlc3Npb25fcmVzdWx0c19ncHMgPC0gZ3BzX2RhdGEgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgZG8obW9kZWwgPSBsbShyaXNrdGFraW5nIH4gel9zY29yZV9hZ2UgKyBnZW5kZXIsIGRhdGEgPSAuKSkgJT4lCiAgc3VtbWFyaXplKAogICAgY291bnRyeSA9IGZpcnN0KGNvdW50cnkpLAogICAgaW50ZXJjZXB0ID0gY29lZihzdW1tYXJ5KG1vZGVsKSlbMSwgMV0sCiAgICBzbG9wZV9hZ2UgPSBjb2VmKHN1bW1hcnkobW9kZWwpKVsyLCAxXSwKICAgIHNsb3BlX2dlbmRlciA9IGNvZWYoc3VtbWFyeShtb2RlbCkpWzMsIDFdCiAgKQoKcmVncmVzc2lvbl9yZXN1bHRzX2dwcwpgYGAKYGBge3J9CmNvbW1vbl9jb3VudHJpZXMgPC0gaW50ZXJzZWN0KFdWU19kYXRhJGNvdW50cnksIGdwc19kYXRhJGNvdW50cnkpCnNlbGVjdGVkX2NvdW50cmllcyA8LSBjKCJBcmdlbnRpbmEiLCAiQXVzdHJhbGlhIiwgIkJyYXppbCIsICJDYW5hZGEiLCAiQ2hpbGUiLCAiQ2hpbmEiLCAiRWd5cHQiLCAiRmlubGFuZCIsICJGcmFuY2UiLCAiR2VvcmdpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiR2VybWFueSIsICJHaGFuYSIsICJIdW5nYXJ5IiwgIkluZGlhIiwgIkluZG9uZXNpYSIsICJJcmFuIiwgIkphcGFuIiwgIkpvcmRhbiIsICJNZXhpY28iLCAiTW9sZG92YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiTW9yb2NjbyIsICJOZXRoZXJsYW5kcyIsICJQZXJ1IiwgIlBvbGFuZCIsICJSb21hbmlhIiwgIlJ1c3NpYSIsICJSd2FuZGEiLCAiU291dGggQWZyaWNhIiwgIlNvdXRoIEtvcmVhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJTcGFpbiIsICJTd2VkZW4iLCAiU3dpdHplcmxhbmQiLCAiVGhhaWxhbmQiLCAiVHVya2V5IiwgIlVrcmFpbmUiLCAiVW5pdGVkIFN0YXRlcyIsICJBbGdlcmlhIiwgIkNvbG9tYmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJFc3RvbmlhIiwgIkhhaXRpIiwgIklyYXEiLCAiS2F6YWtoc3RhbiIsICJOaWdlcmlhIiwgIlBha2lzdGFuIiwgIlBoaWxpcHBpbmVzIiwgIlppbWJhYndlIikKCiMgRmlsdGVyIHRoZSBvcmlnaW5hbCBkYXRhc2V0Cm5ld19XVlMgPC0gV1ZTX2RhdGFbV1ZTX2RhdGEkY291bnRyeSAlaW4lIHNlbGVjdGVkX2NvdW50cmllcywgXQoKIyBWaWV3IHRoZSBuZXcgZGF0YXNldApuZXdfV1ZTCgoKYGBgCgpgYGB7cn0KCnNlbGVjdGVkX2NvdW50cmllcyA8LSBjKCJBcmdlbnRpbmEiLCAiQXVzdHJhbGlhIiwgIkJyYXppbCIsICJDYW5hZGEiLCAiQ2hpbGUiLCAiQ2hpbmEiLCAiRWd5cHQiLCAiRmlubGFuZCIsICJGcmFuY2UiLCAiR2VvcmdpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiR2VybWFueSIsICJHaGFuYSIsICJIdW5nYXJ5IiwgIkluZGlhIiwgIkluZG9uZXNpYSIsICJJcmFuIiwgIkphcGFuIiwgIkpvcmRhbiIsICJNZXhpY28iLCAiTW9sZG92YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiTW9yb2NjbyIsICJOZXRoZXJsYW5kcyIsICJQZXJ1IiwgIlBvbGFuZCIsICJSb21hbmlhIiwgIlJ1c3NpYSIsICJSd2FuZGEiLCAiU291dGggQWZyaWNhIiwgIlNvdXRoIEtvcmVhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJTcGFpbiIsICJTd2VkZW4iLCAiU3dpdHplcmxhbmQiLCAiVGhhaWxhbmQiLCAiVHVya2V5IiwgIlVrcmFpbmUiLCAiVW5pdGVkIFN0YXRlcyIsICJBbGdlcmlhIiwgIkNvbG9tYmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJFc3RvbmlhIiwgIkhhaXRpIiwgIklyYXEiLCAiS2F6YWtoc3RhbiIsICJOaWdlcmlhIiwgIlBha2lzdGFuIiwgIlBoaWxpcHBpbmVzIiwgIlppbWJhYndlIikKCiMgRmlsdGVyIHRoZSBvcmlnaW5hbCBkYXRhc2V0Cm5ld19ncHMgPC0gZ3BzX2RhdGFbZ3BzX2RhdGEkY291bnRyeSAlaW4lIHNlbGVjdGVkX2NvdW50cmllcywgXQoKIyBWaWV3IHRoZSBuZXcgZGF0YXNldApuZXdfZ3BzCgpgYGAKYGBge3J9CnJlZ3Jlc3Npb25fcmVzdWx0c19XVlNfbmV3IDwtIG5ld19XVlMgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgZG8obW9kZWwgPSBsbShaX3Njb3JlX3Jpc2t0YWtpbmcgfiBzY2FsZShhZ2UpICsgZ2VuZGVyLCBkYXRhID0gLikpICU+JQogIHN1bW1hcml6ZSgKICAgIGNvdW50cnkgPSBmaXJzdChjb3VudHJ5KSwKICAgIGludGVyY2VwdF9XVlMgPSBjb2VmKHN1bW1hcnkobW9kZWwpKVsxLCAxXSwKICAgIHNsb3BlX2FnZV9XVlMgPSBjb2VmKHN1bW1hcnkobW9kZWwpKVsyLCAxXSwKICAgIHNsb3BlX2dlbmRlcl9XVlMgPSBjb2VmKHN1bW1hcnkobW9kZWwpKVszLCAxXQogICkKCnJlZ3Jlc3Npb25fcmVzdWx0c19XVlNfbmV3CgpgYGAKYGBge3J9CnJlZ3Jlc3Npb25fcmVzdWx0c19ncHNfbmV3IDwtIG5ld19ncHMgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgZG8obW9kZWwgPSBsbShyaXNrdGFraW5nIH4gc2NhbGUoYWdlKSArIGdlbmRlciwgZGF0YSA9IC4pKSAlPiUKICBzdW1tYXJpemUoCiAgICBjb3VudHJ5ID0gZmlyc3QoY291bnRyeSksCiAgICBpbnRlcmNlcHRfZ3BzID0gY29lZihzdW1tYXJ5KG1vZGVsKSlbMSwgMV0sCiAgICBzbG9wZV9hZ2VfZ3BzID0gY29lZihzdW1tYXJ5KG1vZGVsKSlbMiwgMV0sCiAgICBzbG9wZV9nZW5kZXJfZ3BzID0gY29lZihzdW1tYXJ5KG1vZGVsKSlbMywgMV0KICApCgpyZWdyZXNzaW9uX3Jlc3VsdHNfZ3BzX25ldwoKYGBgCmBgYHtyfQpyZWdyZXNzaW9uX3Jlc3VsdHNfZ3BzX25ldwpyZWdyZXNzaW9uX3Jlc3VsdHNfV1ZTX25ldwojIEFzc3VtaW5nICJjb3VudHJ5IiBpcyB0aGUgY29tbW9uIGNvbHVtbgptZXJnZWRfcmVzdWx0cyA8LSBtZXJnZShyZWdyZXNzaW9uX3Jlc3VsdHNfZ3BzX25ldywgcmVncmVzc2lvbl9yZXN1bHRzX1dWU19uZXcsIGJ5ID0gImNvdW50cnkiLCBhbGwgPSBUUlVFKQoKbWVyZ2VkX3Jlc3VsdHMKCmBgYApgYGB7cn0KCmBgYAoKCgoKCgoKCgoKCgoKCgoKCgoK